Ink jet printers using an array of multiple nozzles have been available for years. In such printers, these nozzles are typically grouped together on a print head, which typically is affixed to a moveable carriage or carrier that moves left and right in a horizontal manner with respect to a sheet of paper that is moving or indexing in a perpendicular, vertical direction. The multiple nozzles are typically grouped in a vertical column on the print head (or multiple vertical columns, especially in a color printer).
On one horizontal pass of the print head multiple horizontal “columns” of dots are simultaneously laid down in a “swath” of ink upon the paper or other print media. As the print head travels in the horizontal direction, it produces tiny dots along the swath according to a “print plan” that has been received by the printer, typically from a host computer. The “width” (i.e., “height,” in this orientation) of the swath is dependent upon the resolution of the print head nozzles (such as 300 dpi (dots per inch)), which is 1/300 inch resolution, as well as the number of nozzles in the vertical column array on the print head. If, for example, the print head has an array of 104 nozzles, and its resolution is 300 dpi, then the swath would be approximately ⅓ inch in width. Typical conventional printers format the print data so that each of the nozzles receives a digital (i.e., either “on” or “off”) datum bit of information virtually simultaneously, which means that, in the above example, a data set of at least 104 bits must be sent to the printhead to control the 104 nozzles that are ready to either print a dot by turning ON (e.g., Logic 1), or to not print a dot which would be the nozzle's OFF state (e.g., Logic 0). This data set for a particular instant of time to control the entire vertical column array of 104 nozzles is designated by the term “firegroup.” Therefore, to create a swath of print data, firegroup after firegroup of print data must be sent to the print head to sequentially turn ON or OFF each of the print head's nozzles at the correct times to reproduce the print data pattern representation. In the above example of the prior art, each firegroup must contain 104 bits of print data and, assuming that the horizontal resolution was also 300 dpi, there would then have to be 300 slices of data per horizontal inch of print head travel via its carrier.
In conventional ink jet printers, it is typical to import the print data from a host PC and to store that print data in the form of a “bitmap.” Bitmap information typically arrives as a series of words of sixteen (16) bits each until a complete slice has been defined. Once the first slice of a swath has been received and stored in the printer's memory system, additional words are then received to define the next consecutive slice, and this procedure continues until all of the slices for a swath have been received and then stored in the printer's memory system. After the first swath has been completed, the subsequently received print data will again be in groupings of words to define the first slice of the next swath, which typically is the adjacent swath to the one that has just been completed.
This process continues until all of the slices for all of the swaths have been received for an entire page to be printed. If no data compression or data compacting techniques are used, the bitmap received by the printer and subsequently stored in the printer's memory system will represent a series of vertical slices adjacent to one another to make up a swath, and a series of horizontal swaths that are adjacent to one another to define the entire vertical structure of the page to be printed. All of these slices and swaths form an entire rectangular page of bitmap print data.
This approach is very memory intensive, because all of the “blank” areas where nothing is to be printed nevertheless require the same amount of memory space as areas that have data to be printed. Without any type of data compression or data compacting techniques, the amount of memory area required to store a single page of print data will always be the number of bits required to make up all of the slices of each swath times the number of swaths for that page. For example, if an entire 8½ by 11 inch page of print data were to be stored in memory at 300 dpi, there would be (8.5 times 300) times (11 times 300)=8,415,000 bits required. This roughly eight million bits of data corresponds to just over one million bytes of memory space required in the printer's memory system, and that is assuming no extra bits are used for any error checking routines, which are typical. It is easy to see that there are advantages to reducing the amount of memory space required to hold print data in such printing systems.
In addition to the memory required to store the printer data in the form of a bitmap, resources are required to create a print plan and to operate the print engine which reads the print plan and operates the print head. The creation of the print plan translates a swath of the bitmap into a series of consecutive firegroups, as is known in the art. A print engine is responsive to each firegroup and causes the necessary nozzles to be fired at a required position of the page. “Shingling” and multiple pass printing are incorporated into the print plan at this stage. There are two limitations to the current practice. First, the amount of data necessary to convey a bitmap to the printer can exceed the capacity of the connections as well as requiring a large amount of memory in the printer for storage. In addition, the creation and execution of the print plan requires additional storage resources in the printer and can delay the printing process as the necessary calculations are made.
To reduce the amount of data sent by the host PC much of the prior art focuses on compressing the bitmap data. Run Length Encoding (RLE) is typical of the types of data management used. Most compression schemes are effective when portions of the bitmap are empty or contain repeating data. These schemes are especially useful for printing word processing documents. The development of color printers has increased the demand for printing images (such as photographs). These types of printing jobs are not conducive to the current data compression schemes because of the lack of empty or repeating data.
The bitmap created by the host PC can be sent to multiple devices for printing. For example, the bitmap can be sent to an attached printer, a stand-alone printer and to a fax machine. All of the machines can subsequently print an image after transforming the bitmap into a print plan specific to that device. Although this system is useful for multiple uses of the bitmap, the tremendous processing power and data storage capabilities of the host PC are not effectively utilized. Accordingly data management systems which create the print plan on the host PC have been developed. The data is then sent to the printer. The data is then utilized by the print engine to control the print head and create the desire image. There is a need for a method and apparatus of compressing the data generated by the host PC before transmission to the printer.